Add ProjectV2 status update tools (list, get, create)#1987
Merged
JoannaaKL merged 6 commits intogithub:mainfrom Feb 18, 2026
Merged
Add ProjectV2 status update tools (list, get, create)#1987JoannaaKL merged 6 commits intogithub:mainfrom
JoannaaKL merged 6 commits intogithub:mainfrom
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Adds ProjectV2 status update support to the GitHub MCP Server by introducing dedicated tools and integrating them into the consolidated projects_* tools, enabling listing, fetching, and creating ProjectV2 status updates via GraphQL.
Changes:
- Added three new tools:
list_project_status_updates,get_project_status_update, andcreate_project_status_update, plus consolidated-tool dispatch support. - Introduced new minimal response type(s) and GraphQL query/mutation structs (including a locally-defined
CreateProjectV2StatusUpdateInput). - Added extensive unit test coverage and updated docs/toolsnaps/tool aliases accordingly.
Reviewed changes
Copilot reviewed 14 out of 14 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| pkg/github/projects.go | Implements GraphQL types/queries/mutation + new tools and consolidated dispatch wiring. |
| pkg/github/minimal_types.go | Adds MinimalProjectStatusUpdate response type. |
| pkg/github/tools.go | Registers the new tools in the tool inventory. |
| pkg/github/toolset_instructions.go | Updates projects toolset instructions to mention status update workflows. |
| pkg/github/deprecated_tool_aliases.go | Adds deprecated aliases mapping new individual tools to consolidated tools. |
| pkg/github/projects_test.go | Adds comprehensive tests for new tools + consolidated dispatch paths. |
| pkg/github/toolsnaps/*.snap | Updates/creates tool schema snapshots for new/updated tools. |
| docs/tool-renaming.md | Documents the new deprecated aliases. |
| README.md | Updates generated docs sections for consolidated tool schema changes. |
Comments suppressed due to low confidence (1)
pkg/github/projects.go:2450
getProjectStatusUpdatechecksq.Node.StatusUpdate.ID == nil, butgithubv4.IDcannot be compared tonil(it’s a string alias), which will not compile. Use an empty-string/zero-value check (or make the field a pointer type if you truly need nil semantics) to detect a missing inline-fragment match.
if q.Node.StatusUpdate.ID == nil || q.Node.StatusUpdate.ID == "" {
return utils.NewToolResultError(fmt.Sprintf("%s: node is not a ProjectV2StatusUpdate or was not found", ProjectStatusUpdateGetFailedError)), nil, nil
}
8196111 to
ad3fcf5
Compare
5a0aab5 to
f3b31a6
Compare
JoannaaKL
previously approved these changes
Feb 16, 2026
Contributor
tommaso-moro
left a comment
There was a problem hiding this comment.
Thank you for your work on this!
I left a comment, other than that looks good and happy to stamp once conflicts are resolved!
Contributor
There was a problem hiding this comment.
These tools are not being renamed I believe, so they shouldn't be added to this list
Closes github#1963 Add three new individual tools and wire them into the consolidated project tools for managing GitHub ProjectV2 status updates: - list_project_status_updates / projects_list: List status updates for a project with pagination, ordered by creation date descending - get_project_status_update / projects_get: Fetch a single status update by node ID - create_project_status_update / projects_write: Create a status update with optional body, status, start_date, and target_date New GraphQL types and queries (statusUpdateNode, statusUpdatesUserQuery, statusUpdatesOrgQuery, statusUpdateNodeQuery) support both user-owned and org-owned projects. The CreateProjectV2StatusUpdateInput type is defined locally since the shurcooL/githubv4 library does not include it. Also includes quality improvements discovered during implementation: - Extract resolveProjectNodeID helper to deduplicate ~70 lines of project ID resolution logic shared between addProjectItem and createProjectStatusUpdate - Add client-side YYYY-MM-DD date format validation for start_date and target_date fields before sending to the API - Fix brittle node type check in getProjectStatusUpdate that relied on stringifying a githubv4.ID and comparing to "<nil>" - Refactor createProjectStatusUpdate to accept typed parameters instead of raw args map - Add deprecated tool aliases for all three new individual tools - Add ProjectResolveIDFailedError constant for consistent error reporting Test coverage includes 21 subtests covering both user and org paths, pagination, error handling, input validation, field verification, and consolidated tool dispatch.
Loosen projects_get schema to only require "method", since get_project_status_update only needs status_update_id and never uses owner or project_number. Also use pointer types for optional statusUpdateNode fields, add owner_type validation for list/create status updates, clamp negative per_page values, and fix resolveProjectNodeID to return "" instead of nil on error.
f20722e to
8e321f7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add three new tools for managing GitHub ProjectV2 status updates (list, get, create), wired into both individual and consolidated project tools.
Why
Fixes #1963
What changed
list_project_status_updatestool (+projects_listmethod): list status updates with pagination, ordered by creation date descendingget_project_status_updatetool (+projects_getmethod): fetch a single status update by node IDcreate_project_status_updatetool (+projects_writemethod): create a status update with optional body, status, start_date, and target_datestatusUpdateNode,statusUpdatesUserQuery,statusUpdatesOrgQuery,statusUpdateNodeQuery) supporting both user-owned and org-owned projectsCreateProjectV2StatusUpdateInputlocally (not in shurcooL/githubv4 library)MinimalProjectStatusUpdateresponse type inminimal_types.goresolveProjectNodeIDhelper to deduplicate ~70 lines of project ID resolution logic shared betweenaddProjectItemandcreateProjectStatusUpdatestart_dateandtarget_dategetProjectStatusUpdate(was stringifyinggithubv4.IDand comparing to "<nil>")createProjectStatusUpdateto accept typed parameters instead of rawargs map[string]anyProjectResolveIDFailedErrorconstant for consistent error reportingMCP impact
list_project_status_updates,get_project_status_update,create_project_status_update) and three new methods on the consolidated tools (projects_list,projects_get,projects_write)Prompts tested (tool changes only)
Security / limits
per_pageis capped toMaxProjectsPerPage(50). Date inputs are validated client-side before hitting the API. Status values are validated against an allowlist.Tool renaming
deprecated_tool_aliases.goLint & tests
./script/lint./script/testDocs
script/generate-docsrun, README.md and docs/tool-renaming.md updated